﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using Google.GData.Client;
using Google.GData.Contacts;
using Google.GData.Extensions;

namespace KL.Store.Core.Contact
{
    public class GoogleContactService
    {
        public static ContactsService GContactService = null;

        #region InitializeService

        public static void InitializeService(string username, string password)
        {
            GContactService = new ContactsService("Contact Infomation");
            GContactService.setUserCredentials(username, password);
        }

        #endregion

        #region GetAllContact

        public static List<ContactDetail> GetAllContact(string username, string password)
        {
            GContactService = new ContactsService("Contact Infomation");
            GContactService.setUserCredentials(username, password);

            List<ContactDetail> contactDetails = new List<ContactDetail>();

            ContactsQuery query = new ContactsQuery(ContactsQuery.CreateContactsUri(username));

            query.NumberToRetrieve = 10000;

            ContactsFeed feed = GContactService.Query(query);

            int itemsPerPage = feed.ItemsPerPage;
                        
            foreach (ContactEntry entry in feed.Entries)
            {
                ContactDetail contact = new
                ContactDetail
                {
                    Name = entry.Title.Text,
                    EmailAddress1 = entry.Emails.Count >= 1 ? entry.Emails[0].Address : "",
                    EmailAddress2 = entry.Emails.Count >= 2 ? entry.Emails[1].Address : "",
                    Phone = entry.Phonenumbers.Count >= 1 ? entry.Phonenumbers[0].Value : "",
                    //Address = entry.PostalAddresses.Count >= 1 ? entry.PostalAddresses[0].Value : "",
                    Details = entry.Content.Content
                };

                contactDetails.Add(contact);
            }

            return contactDetails;
        }

        #endregion

        #region AddContact

        //public static void AddContact(ContactDetail contact)
        //{
        //    ContactEntry newEntry = new ContactEntry();
        //    newEntry.Title.Text = contact.Name;

        //    EMail primaryEmail = new EMail(contact.EmailAddress1);
        //    primaryEmail.Primary = true;
        //    primaryEmail.Rel = ContactsRelationships.IsWork;
        //    newEntry.Emails.Add(primaryEmail);

        //    EMail secondaryEmail = new EMail(contact.EmailAddress2);
        //    secondaryEmail.Rel = ContactsRelationships.IsHome;
        //    newEntry.Emails.Add(secondaryEmail);

        //    PhoneNumber phoneNumber = new PhoneNumber(contact.Phone);
        //    phoneNumber.Primary = true;
        //    phoneNumber.Rel = ContactsRelationships.IsMobile;
        //    newEntry.Phonenumbers.Add(phoneNumber);

        //    PostalAddress postalAddress = new PostalAddress();
        //    postalAddress.Value = contact.Address;
        //    postalAddress.Primary = true;
        //    postalAddress.Rel = ContactsRelationships.IsHome;
        //    newEntry.PostalAddresses.Add(postalAddress);

        //    newEntry.Content.Content = contact.Details;

        //    Uri feedUri = new Uri(ContactsQuery.CreateContactsUri("default"));

        //    ContactEntry createdEntry = (ContactEntry)GContactService.Insert(feedUri, newEntry);
        //}

        #endregion

    }

    #region ContactDetail

    public class ContactDetail
    {
        public string Name { get; set; }
        public string EmailAddress1 { get; set; }
        public string EmailAddress2 { get; set; }
        public string Phone { get; set; }
        public string Address { get; set; }
        public string Details { get; set; }
    } 
    #endregion

}
